package main

import (
	"errors"
)

type User struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

type Result[T any] struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    T      `json:"data"`
}

func printR(data any) (d string, e error) {

	d = "hello world"
	e = errors.New("error")
	return
}

func div(i int, j int) (int, error) {
	if j == 0 {
		return 0, errors.New("cannot 0")
	}

	return i / j, nil
}

func init() {
	println("init first invoke")
}

func add(a int) int {
	a += 1
	return a
}

func add2(a *int) int {
	*a += 1
	return *a
}

func add3(a **int) int {
	**a += 1
	return **a
}

func main() {
	//a := add(5)
	//println(a)
	//
	//b := 5
	//add(b)
	//println(b)
	//
	//c := 5
	//add2(&c)
	//println(c)

	d := 5
	var e *int = &d
	add3(&e)
	println(*e)
	//
	//r := Result[string]{}
	//r.Data = "string"
	//
	//r2 := Result[int]{}
	//
	//r2.Data = 1
	//
	//println(r.Data)
	//println(r2.Data)
	//
	//var r3 Result[User] = Result[User]{}
	//
	//r3.Data = User{
	//	Name: "Name",
	//}
	//
	//println(r3.Data.Name)
	//jx, _ := json.Marshal(r3.Data)
	//println(string(jx))
	//
	//d2, err := printR("string")
	//println(d2)
	//println(err.Error())
	//
	//i, j, k := 1, 2, 3
	//println(i, j, k)
	//
	//if r, err := div(10, 0); err == nil {
	//	println(r)
	//} else {
	//	println(err.Error())
	//}
}
